import { withAuth } from 'next-auth/middleware'
import { NextResponse } from 'next/server'
import { getToken } from 'next-auth/jwt'
//设置会话时长
export default withAuth(
  async function middleware(req) {
    const token = req.nextauth.token
    const path = req.nextUrl.pathname

    // 检查会话活动时间
    if (token) {
      const lastActivity = token.lastActivity as number || Date.now();
      const currentTime = Date.now();
      
      // 计算不活动时间（毫秒）
      const inactivityTime = currentTime - lastActivity;
      
      // 检查是否记住了登录
      const remember = token.remember as boolean || false;
      
      // 设置会话超时时间（毫秒）
      // 如果记住登录：30天，否则4小时
      const timeoutLimit = remember 
        ? 30 * 24 * 60 * 60 * 1000 // 30天
        : 4 * 60 * 60 * 1000;      // 4小时
      
      // 如果超过超时限制，重定向到登录页面
      if (inactivityTime > timeoutLimit) {
        console.log(`会话超时：不活动时间 ${inactivityTime}ms 超过限制 ${timeoutLimit}ms`);
        
        // 排除登录和注销页面，避免循环重定向
        if (path !== '/login' && path !== '/register' && !path.startsWith('/api/auth')) {
          return NextResponse.redirect(new URL('/login?timeout=true', req.url));
        }
      } else {
        // 更新令牌最后活动时间
        // 注意：这只会在当前请求中更新，不会持久化到后续请求
        // 持久化更新由客户端的useSessionActivity钩子处理
        console.log(`会话活动正常：不活动时间 ${inactivityTime}ms，限制 ${timeoutLimit}ms`);
      }
    }

    // 登录和注册页面不需要额外的处理
    if (path === '/login' || path === '/register') {
      return NextResponse.next()
    }

    // 根据用户角色限制访问
    if (path.startsWith('/admin') && token?.role !== 'ADMIN') {
      return NextResponse.redirect(new URL('/', req.url))
    }

    return NextResponse.next()
  },
  {
    callbacks: {
      authorized: ({ token, req }) => {
        const path = req.nextUrl.pathname
        
        // 登录和注册页面总是允许访问
        if (path === '/login' || path === '/register') {
          return true
        }
        
        // API路由也允许访问，让API自己处理认证
        if (path.startsWith('/api/')) {
          return true
        }
        
        // 其他受保护路由需要验证令牌
        return !!token
      },
    },
  }
)

// 配置需要保护的路由
export const config = {
  matcher: [
    '/((?!api|_next/static|_next/image|favicon.ico).*)',
  ],
} 